<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Agp\CoreBundle\Validator\Constraints as CoreAssert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use APY\DataGridBundle\Grid\Mapping as GRID;

/**
 * Agp\CoreBundle\Entity\ProdutoAgape
 *
 * @ORM\Table(name="produto_agape")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\ProdutoAgapeRepository")
 * @ORM\HasLifecycleCallbacks
 * 
 * @GRID\Source(columns="codProdutoAgape, nome, vlrProduto, qtdeMinimo, qtdeAtual")
 */
class ProdutoAgape
{
    
    /**
     * @var integer $codProdutoAgape
     *
     * @ORM\Column(name="cod_produto_agape", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * 
     * @GRID\Column(title="Código", type="text", size="5", primary=true, visible=false)
     */
    protected $codProdutoAgape;
    
    /**
     * @var string $nome
     *
     * @ORM\Column(name="nome", type="string", length=42, nullable=false)
     * @Assert\NotBlank
     * @Assert\Length(
     *      max = "21"
     * )
     * @GRID\Column(title="Nome", type="text")
     */
    protected $nome;

    /**
     * @var float $vlrProduto
     *
     * @ORM\Column(name="vlr_base", type="float", nullable=true)
     * @Assert\NotBlank
     * 
     * @GRID\Column(title="Valor", type="text")
     */
    protected $vlrProduto;

    /**
     * @var float $qtdeMinimo
     *
     * @ORM\Column(name="qtde_minimo", type="float", nullable=true)
     * @GRID\Column(title="Mínimo", type="text")
     */
    protected $qtdeMinimo;

    /**
     * @var float $qtdeAtual
     *
     * @ORM\Column(name="qtde_atual", type="float", nullable=true)
     * 
     * @GRID\Column(title="Atual", type="text")
     */
    protected $qtdeAtual;
    
    public function __construct() {
        $this->ProdutoList = new ArrayCollection();
    }
    
    public function __toString() {
        return $this->nome;
    }
    
    public function getNomeEstoque(){
        return $this->nome . ' - Estoque: '.$this->qtdeAtual;
    }
    
    public function atualizaQtde($qted){
        $this->qtdeAtual += $qted;
    }
    
    public function retirarQtde($qtde){
        if ($qtde > $this->qtdeAtual){
            return 'invalid';
        }
        
        $this->qtdeAtual -= $qtde;
    }
    
    /**
     * @ORM\PrePersist @ORM\PreUpdate
     */
    public function setZero(){
        if ($this->qtdeAtual == null){
            $this->setQtdeAtual(0);
        }
        
        if ($this->qtdeMinimo == null){
            $this->setQtdeMinimo(0);
        }
    }
    
    public function getCodProdutoAgape() {
        return $this->codProdutoAgape;
    }

    public function setCodProdutoAgape($codProdutoAgape) {
        $this->codProdutoAgape = $codProdutoAgape;
    }

    
    /**
     * Set nome
     *
     * @param string $nome
     * @return Produto
     */
    public function setNome($nome)
    {
        $this->nome = mb_strtoupper($nome, 'UTF-8');
    
        return $this;
    }
    
    /**
     * Get nome
     *
     * @return string 
     */
    public function getNome()
    {
        return $this->nome;
    }

    /**
     * Set vlrProduto
     *
     * @param float $vlrProduto
     * @return Produto
     */
    public function setVlrProduto($vlrProduto)
    {
        $this->vlrProduto = substr(str_replace(",", ".", $vlrProduto),3);
    
        return $this;
    }

    /**
     * Get vlrProduto
     *
     * @return float 
     */
    public function getVlrProduto()
    {
        return $this->vlrProduto;
    }

    /**
     * Set qtdeMinimo
     *
     * @param float $qtdeMinimo
     * @return Produto
     */
    public function setQtdeMinimo($qtdeMinimo)
    {
        $this->qtdeMinimo = $qtdeMinimo;
    
        return $this;
    }

    /**
     * Get qtdeMinimo
     *
     * @return float 
     */
    public function getQtdeMinimo()
    {
        return $this->qtdeMinimo;
    }

    /**
     * Set qtdeAtual
     *
     * @param float $qtdeAtual
     * @return Produto
     */
    public function setQtdeAtual($qtdeAtual)
    {
        $this->qtdeAtual = $qtdeAtual;
    
        return $this;
    }

    /**
     * Get qtdeAtual
     *
     * @return float 
     */
    public function getQtdeAtual()
    {
        return $this->qtdeAtual;
    }
}